Glosario Basic Fortran Pascal C Prolog Delphi Visual Basic Java JavaScript

TI-99/4a

99er

Características

Técnicas

Características 1
Características 2
Características 3

Introducción

Darle instrucciones a un ordenador se le llama programar. Un programa le dice exactamente al ordenador lo que tiene que hacer. Cada tarea del ordenador, no importa lo sencilla que sea, debe hallarse indicada en un programa, o la tarea no será realizada. Es más, el ordenador seguirá las instrucciones del programa con toda precisión, incluidos los errores. Como resultado de ello, una correcta programación requiere una atención meticulosa a los detalles.

¿Qué es un ordenador? Es una máquina diseñada para ayudarle a resolver problemas relativos al tratamiento y procesamiento de la información. Un sistema informático típico tiene:

En la mayor parte de los microordenadores, datos e instrucciones pueden entrarse y los resultados pueden visualizarse a través de un sólo componente, llamado un terminal de pantalla. Un terminal de pantalla posee un teclado como el de una máquina de escribir para entrar los datos e instrucciones, y una pantalla parecida a la de una televisión para visualizar éstos y los resultados.

A un sistema informático se le pueden añadir entre otras cosas:

Memorias periféricas:

Interfaces (elementos de interconexión) hacia:

Primeros programas

Teclee este programa en su terminal. Después de cada línea, pulse la tecla de retorno (return) y aguarde a que aparezca el carácter "*" antes de empezar a teclear una nueva línea. Si comete un error de escritura, pulse retorno y empiece de nuevo (con el mismo número de línea:

* 5 REM PROGRAMA FUNCIONA
*10 PRINT "FUNCIONA"
*20 END
*
La instrucción REM (REMark; observación), le dice al ordenador que ignore esta línea. Es utilizada para comentarios que usted desee hacer para su propio uso y para el de otras personas que lean su programa.

La instrucción PRINT (Imprimir), hará que el mensaje o dato que sigue sea impreso o aparezca en la pantalla. Cualquier texto/mensaje entre comillas será impreso exactamente igual a como se ha entrado.

La instrucción END (terminar), le dice a BASIC que termina el programa.

Teclee RUN y observe la pantalla. Obtendrá lo siguiente:

*RUN
 FUNCIONA
*
Practique el uso de su terminal entrando y procesando el siguiente programa:

* 5 REM PROGRAMA POEMA
*10 PRINT "LAS ROSAS SON ROJAS"
*20 PRINT "LAS VIOLETAS SON AZULES"
*30 PRINT "SI NOSOTROS PODEMOS"
*40 PRINT "APRENDER BASIC"
*50 PRINT "ENTONCES USTED TAMBIEN"
*60 END
Teclee RUN y observe la pantalla. Obtendrá este resultado:

*RUN
 LAS ROSAS SON ROJAS
 LAS VIOLETAS SON AZULES
 SI NOSOTROS PODEMOS
 APRENDER BASIC
 ENTONCES USTED TAMBIEN
*

Los números de las líneas

En BASIC, tiene que proporcionar usted un número de línea delante de cada instrucción. Este número de línea obligatorio tiene varias finalidades:

*10 X=2
*20 PRINT X,Y
*15 Y=3
*
Instrucción de asignación: Asigna el valor de la derecha a la variable de la izquierda. En este caso, tras la asignación, X contendrá el número 2. Este ejemplo puede ser escrito como: "*10 LET X=2"

Si tras teclear una línea determinada (supongamos la línea 20 del ejemplo anterior) descubre usted que ha cometido un error, puede corregirlo en la línea siguiente insertando un número intermedio entre el de las dos líneas que le correspondan, (en ese caso puede ser el 15). Cuando pulse RUN, las instrucciones se ordenarán en número creciente antes de ejecutarse el programa:

*RUN
2	3
*
Si quiere efectuar usted una comprobación, la instrucción LIST hará que el ordenador le muestre lo que lleva escrito hasta el momento. En la pantalla, las instrucciones aparecerán por orden:

*LIST
 10 X=2
 15 Y=3
 20 PRINT X,Y
*

Salvando sus programas

Una vez que ha conseguido un programa operativo, puede que desee conservarlo. Para almacenar un programa en el sistema, piense en un nombre único que pueda recordar. Tras el carácter de preparado (el asterisco "*"), teclee SAVE y pulse retorno. El sistema le preguntará por el nombre bajo el cual desea almacenar el programa. Teclee el nombre, pulse retorno y aguarde a que el sistema indique que está preparado de nuevo, o aparezca un mensaje de error.

Para comprobar que su SAVE a funcionado realmente, teclee NEW, seguido por retorno. El comando NEW, en este caso, borrará lo que tenga en aquel momento en su área de trabajo. Luego teclee LIST, seguido de retorno. No obtendrá ningún listado, solamente el preparado, puesto que ahora está trabajando en un espacio de trabajo en el que aún no hay ningún programa.

Para cargar lo salvado, teclee OLD, seguido del nombre del programa que utilizó usted al salvarlo (no olvide teclear retorno tras cada orden). Luego teclee LIST. Su programa aparecerá, si se salvó bien.

Si ya no necesita más de algún programa almacenada, teclee UNSAVE seguido por el nombre del archivo. Desaparecerá de la memoria de la máquina. Cuando utilice usted el BASIC en tiempo compartido con otros usuario, utilice el UNSAVE para eliminar sus programas siempre que no los necesite ya más.

Lab 1. Aritmética simple

Compruebe que su sistema funciona correctamente efectuando un poco de aritmética:

* 5 REM SUMA
*10 PRINT 2 + 7
*RUN
 9
*
Números reales:

* 5 REM RESTA
*10 PRINT 2.7 - 8.342
*RUN
 -5.642
*
Símbolos aritméticos:

	Potenciación:	^ o **		Suma:	+
	Multiplicación:	*		Resta:	-
	División:	/

Prioridad

El ordenador efectuará normalmente primero la potenciación, luego la multiplicación y la división (avanzando de izquierda a derecha), y luego la suma y la resta (avanzando de izquierda a derecha). Lo que se halle dentro de los paréntesis, sin embargo, será ejecutado siempre primero.

* 5 REM SUMA Y DIVIDE
*10 PRINT (3.6+4.2)/(-8.762)
*RUN
 -.8902
Otro:

* 5 REM UTILIZACIÓN DE VARIABLES
*10 X=3.5
*20 Y=-18.3009
*30 PRINT (X-2+Y**2)/(X-Y)**2
*RUN
 .7078

Comas, puntos y comas y tabulador

Los siguientes signos de puntuación son utilizados entre campos impresos para indicar espaciado entre esos campos. Los principales signos de control son:

Si alguno de estos signos aparece al final de una línea impresa, hace que la siguiente instrucción PRINT empiece en la misma línea. Esto puede resultar útil en organizar su output de modo que tenga un buen aspecto.

*80 X=8.25
*90 Y=-18.428
*100 PRINT X,Y
*RUN
 8.25	-18.428
*100 PRINT X;Y
*RUN
 8.25 -18.428
*100 PRINT X,TAB(20), Y
*RUN
 8.25                    -18.428

Variables alfanuméricas y variables numéricas

Una variable numérica es un nombre de variable que almacena un número. En la mayoría de las versiones del BASIC, un nombre variable numérico consiste en una letra, o en una letra seguida por una o más letras o dígitos.

Para asignar un valor a un número variable, escriba: 10 X=100

Una variable de cadena o variable alfanumérica es un nombre de variable que almacena una hilera de caracteres (como por ejemplo un nombre). En la mayor parte de las versiones del BASIC, un nombre variable alfanumérico consiste en una letra, o en una letra seguida por una o más letras o dígitos y terminando siempre con un signo de dólar ($). En TI-BASIC las cadenas tienen un máximo de 112 caracteres.

Para asignar un valor a una variable alfanumérica, escriba: 15 A$="SMITH"

Instrucciones INPUT

La instrucción INPUT obtiene datos de su terminal durante la ejecución del programa:

*10 PRINT "ENTRA UN NUMERO"
*20 INPUT x
*30 PRINT "GRACIAS"
*40 END
*RUN
 ENTRA UN NUMERO
?
243
 GRACIAS
*
Cuando aparece el signo de interrogación la ejecución del programa se detiene hasta que se introduce un número, en este caso 243. La máquina sitúa el número que usted le ha teclado en la localización llamada X.

Lab 2. Interés compuesto

*100 REM LAB2. INTERES COMPUESTO
*110 PRINT "CUANTO QUIERE INVERTIR?"
*120 INPUT C
*130 PRINT "CUAL ES EL TIPO ANUAL DE INTERES?"
*140 INPUT I
*150 PRINT "CUANTOS AÑOS QUIERE ESPERAR?
*160 INPUT N
*170 S=C*(1+I)**N
*180 PRINT "TRAS";N;"AÑOS TENDRA";S
*230 END
*RUN
 CUANTO QUIERE INVERTIR?
?
10000
 CUAL ES EL TIPO ANUAL DE INTERES?
?
.17
 CUANTOS AÑOS QUIERE ESPERAR?
?
8
 TRAS 8 AÑOS TENDRA 35114.5
*

La instrucción IF...THEN

En el siguiente ejemplo si el número entrado es el 999, entonces el programa se dirigirá a la línea 100, imprimirá "VALE" y se detendrá. Si no, simplemente irá a la siguiente línea del programa, en este caso la línea 40, que inicia de nuevo el ciclo.

Recuerde esta regla acerca del IF: si la condición es cierta, el programa salta a la instrucción cuyo número aparece después de THEN; si la condición es falsa, el programa prosigue con la siguiente instrucción. Una instrucción IF puede comprobar otras condiciones además de la igualdad. Los símbolos <> emparejados significan no igual, <= significa menor que o igual a y >= significa mayor que o igual a.

*  5 REM ***EJEMPLO 4***
* 10 PRINT "ENTRE UN NUMERO"
* 20 INPUT X
* 30 IF X=999 THEN 100
* 40 GOTO 10
*100 PRINT "VALE"
*120 END
*RUN
 ENTRE UN NUMERO
?
14
 ENTRE UN NUMERO
?
999
VALE
*
La instrucción GOTO simplemente indica al ordenador que salte a una línea determinada.

Podemos utilizar la instrucción IF para añadir flexibilidad a nuestro programa de interés compuesto:

Lab 2. Interés compuesto

*100 REM LAB2. INTERES COMPUESTO
*110 PRINT "CUANTO QUIERE INVERTIR?"
*120 INPUT C
*130 PRINT "CUAL ES EL TIPO ANUAL DE INTERES?"
*140 INPUT I
*150 PRINT "CUANTOS AÑOS QUIERE ESPERAR?
*160 INPUT N
*170 S=C*(1+I)**N
*180 PRINT "TRAS";N;"AÑOS TENDRA";S
*190 PRINT "DESEA CONTINUAR (S/N)"
*200 INPUT A$
*210 IF A$="S" THEN 110
*220 PRINT "FIN DEL TRABAJO"
*230 END
*RUN
 CUANTO QUIERE INVERTIR?
?
10000
 CUAL ES EL TIPO ANUAL DE INTERES?
?
.17
 CUANTOS AÑOS QUIERE ESPERAR?
?
8
 TRAS 8 AÑOS TENDRA 35114.5
 DESEA CONTINUAR (S/N)
?
N
 FIN DE TRABAJO
*

PRINT USING

Hay otra forma de controlar el espaciado entre informaciones impresas además de las comas y los puntos y comas. En la instrucción PRINT USING, nos referimos a una instrucción IMAGE separada que nos muestra como imprimir las variables listadas en la instrucción de impresión. Por ejemplo, el par de instrucciones:

* 10 PRINT USING 100, A, B
...
*100 : ####.## ##.### PRUEBA COMPLETA
dará lugar a la siguiente línea impresa (suponiendo que A = 23.9637 y B = 8.5527):

23.96 -8.552 PRUEBA COMPLETA
Una instrucción IMAGE siempre empieza con dos puntos. El primer número dentro de la instrucción PRINT USING se refiere al número de línea de la instrucción IMAGE.

En general, el compilador BASIC reconoce una hilera de signos "#" o una hilera de signos "#" con un punto decimal intercalado como un grupo de posiciones de caracteres donde imprimir una sola variable, ya sea una variable numérica o una variable alfanumérica.

Si no especifica usted sitio suficiente en su hilera de signos "#", y empieza a imprimir un campo que es más largo que el espacio disponible, los caracteres extra de la derecha se perderán. Si intenta imprimir un número que es demasiado grande para el espacio disponible, de todos modos, normalmente se imprimirán asteriscos.

Otros caracteres en una instrucción IMAGE, aparte del signo "#", son impresos tal como están escritos, y el primer carácter de la línea impresa empieza inmediatamente después de los dos puntos. En una instrucción IMAGE, los espacios en blanco no son ignorados.

* 80 X=8.25
* 90 Y=-18.428
*100 PRINT USING 200, X, Y
*200 :##.##	###.###
*RUN
 8.25	-18.428
*

Los bucles FOR..NEXT

A menudo es necesario ejecutar repetidamente un bloque de instrucciones. Para ello se utilizan un par de instrucciones especiales. La primera, una instrucción FOR, actúa al principio del bloque que ha de ser repetido. La segunda, una instrucción NEXT, actúa al final del bloque.

La instrucción FOR tiene la forma general:

FOR índice    = valor de TO valor STEP incremento
    del bucle   inicio      final

índice del bucle es una variable. Los valores de inicio y final determinan
el número de veces que se repetirán las instrucciones.
La instrucción NEXT tiene la forma general:

NEXT índice del
     bloque

Le dice al ordenador que añada el incremento al índice y vuelva a la
instrucción FOR.
Algunos ejemplos:

FOR I=1 TO 10 STEP 2
...			<--Se repetirá 5 veces
NEXT I

FOR J=2 TO 10 STEP 11
...			<--Se repetirá 10 veces
NEXT J
Un programa completo:

* 10 REM BUCLES FOR NEXT
* 20 FOR I=1 TO 5                    <--El incremento de default es 1
* 30 PRINT "ADELANTE MIS CORSARIOS"
* 40 NEXT I
* 50 PRINT "	!EUREKA!"
* 60 END
*RUN
 ADELANTE MIS CORSARIOS
 ADELANTE MIS CORSARIOS
 ADELANTE MIS CORSARIOS
 ADELANTE MIS CORSARIOS
 ADELANTE MIS CORSARIOS
*

Leyendo datos

Si tiene usted un conjunto fijo de datos y desea procesar su programa con ellos, el BASIC le permite agrupar los datos en una o más instrucciones DATA, como en:

* 10 REM EJEMPLO DATOS
* 20 DATA 4,6,2
* 30 DATA -6,8
El sistema recoge todas sus instrucciones DATA separadas en una instrucción más larga, empezando con la instrucción DATA con el número de línea más pequeño. Cada vez que es ejecutada una instrucción READ en su programa, la siguiente entrada disponible en las instrucciones DATA es utilizada para proporcionar los datos para la instrucción READ. Así, si añadimos al programa de arriba las instrucciones:

* 40 READ A,B
* 50 READ C,D,E
se producirán los siguientes pasos:

A=4
B=6
C=2
D=-6
E=8
Si no hay suficientes datos para suministrar a todas las instrucciones READ, se imprimirá un mensaje al respecto. Para ver lo que es este mensaje, añada estas líneas y procese el programa:

* 60 PRINT A,B,C,D,E
* 70 READ F		<--Imprimirá un mensaje como "OUT OF DATA"
¿Y si se desea leer los datos alfanuméricos? Entonces necesitará utilizar variables alfanuméricas en la instrucción READ para almacenar los datos, y la cadena de caracteres tiene que sustituirse normalmente entre comillas en la instrucción DATA:

* 130 DATA 1,134.89,"HILTON HAWAI"
...
* 270 READ T,A,M$

Lab 3. Cuenta de gastos

Considere el siguiente problema hipotético. Tiene 10 instrucciones DATA, cada una de las cuales contiene el tipo T, la cantidad C, y el concepto M$ referente a un solo gasto de un breve viaje de negocios a Hawai. Escriba un programa para leer las 10 instrucciones DATA y procesarlas de acuerdo con las siguientes pautas:

100 REM LAB 3. CUENTA DE GASTOS
110 REM SIGUEN 10 INSTRUCCIONES DE DATOS,
120 REM DANDO CADA UNA, POR ORDEN,
130 REM TIPO, CANTIDAD Y MOTIVO
140 DATA 1,134.89,"HILTON HAWAI"
150 DATA 3,44.32,"JOE'S CASINO"
160 DATA 2,4.89,"CHEN'S QUICK FOOD"
170 DATA 1,5.88,2,"BETTY'S BREAKFAST NOOK"
180 DATA 1,3.66,"TAXI"
190 DATA 3,1.45,"DIAMOND HEAD TOURS"
200 DATA 1,46.89,"HILTON HAWAI"
210 DATA 2,33.77,"BUD'S BOOKS"
220 DATA 2,14.39,"TAXI"
230 DATA 3,57.99,"JOE'S CASINO"
240 REM *** FIN DE LOS DATOS ***
250 PRINT "REEMBOLSO CUENTA DE GASTOS"
260 PRINT "TIPO CONCEPTO    CANT.  REEMB."
270 FOR I=1 TO 10
280 READ T,A,M$
290 IF T<>1 THEN 310
300 R=A
310 GOTO 380
320 IF T<>2 THEN 340
330 R=.80*A
340 GOTO 380
350 IF T<>3 THEN 370
360 R=.2*A
370 GOTO 380
380 PRINT "NUM. TIPO EQUIVOCADO EN LINEA DATA",T
390 REM PROGRAMA PROSIGUE AQUI
400 PRINT USING 410,T,M$,A,R
410 :# ############# ###.## ###.##
420 NEXT I
430 PRINT "TODAS LAS INSTRUCCIONES PROCESADAS"
440 END

RUN

REEMBOLSO DE CUENTA DE GASTOS
TIPO	MOTIVO			CANT.	REEMB.
   1	HILTON HAWAI		134.89	134.89
   3	JOE'S CASINO		44.32	8.86
   2	CHEN'S QUICK FOOD	4.89	3.91
   1	BETTY'S BREAKFAST NOOK	5.88	5.88
   1	TAXI			3.66	3.66
   3	DIAMOND HEAD TOURS	1.45	0.29
   1	HILTON HAWAI		46.89	46.89
   2	BUD'S BOOKS		33.77	27.02
   2	TAXI			14.39	11.51
   3	JOE'S CASINO		57.99	11.60

Concepto de series

En el mundo real, la mayor parte de los números no son más que elementos individuales de un grupo de números, por ejemplo, la temperatura cada hora, o la categoría o el número de la seguridad social de los empleados de una compañía. No resulta práctico darle a cada valor separado un nombre distinto, a menos que automaticemos el procesado de esos nombres. Aquí es donde entran las series.

Una serie 1D o unidimensional es una hilera de celdillas, conteniendo cada una de ellas un valor. He aquí un ejemplo:

	Q 5 3 1 -2 8 4 -9 0 0 7
	  1 2 3  4 5 6  7 8 9 10
En el ejemplo mostrado aquí, el nombre de la serie es Q, y hay diez celdillas en la serie. Cada celdilla tiene un número. Si deseamos referirnos al número de la celdilla 7, escribiremos Q(7), como en: X=Q(7). Si deseamos situar un cierto número en la celdilla 2 de Q: Q(2)=3.14

En casi todas las versiones del BASIC hay una celdilla extra, la celdilla 0, que está disponible mediante alguna instrucción especial. Si utiliza una serie con menos de 10 celdillas no tiene que darle dimensión. Si, en cambio, necesita más de 10 celdillas, entonces antes de empezar a utilizar la serie, debe colocar una instrucción de dimensión diciendo su nombre y lo grande que es:

100 DIM A(15), X(15), M$(300)
Las series pueden tener los mismos nombres que las variables numéricas. El siguiente programa construye una serie conteniendo los 20 primeros números nones:

10 REM NUMEROS NONES
20 DIM N(20)
30 FOR K=1 TO 20
40 N(K)=2*K-1
50 NEXT K
60 FOR I=1 TO 20
70 PRINT N(I)
80 NEXT I
90 END

Lab 4. Análisis de ventas

Escriba un programa en BASIC para procesar un conjunto de instrucciones DATA. La primera instrucción DATA contiene el número de los artículos que llevan los representantes que deben ser procesados. Cada instrucción siguiente contiene el nombre de un representante y las ventas de cada uno de 5 artículos. Lea cada instrucción DATA y sume las ventas de los 5 artículos para obtener el total de ventas de ese representante. Al mismo tiempo, vaya sumando las ventas de cada artículo para conseguir al final el total de ventas de dicho artículo. Imprima el nombre, las ventas de los 5 artículos, y el total de ventas del representante. Luego lea la siguiente instrucción DATA.

Cuando todas las instrucciones DATA hayan sido procesadas, imprima las ventas totales para cada uno de los 5 artículos; luego imprima "trabajo terminado" y pare.

110 REM *** LAB 4. ANALISIS DE VENTAS
120 DATA 3     <--- ESTO INDICA EL NÚMERO DE REPRESENTANTES
130 DATA "LOPEZ",3,0,5,4,10
140 DATA "PEREZ",1,6,10,2,3
150 DATA "PUIG",0,10,3,6,6
160 REM FIN DE LOS DATOS
170 REM EMPIEZA EL PROGRAMA
180 PRINT "ANALISIS DE VENTAS"
190 PRINT "           VENTAS POR ARTICULO"
200 PRINT USING 400, "REPRESENTANTES",
                      1,2,3,4,5,"TOTAL VENTAS"
210 PRINT
220 READ N
230 REM N ES EL NUMERO DE REPRESENTANTES
240 REM LA SERIE 1D S CONTIENE LAS VENTAS DE LOS 5 ARTICULOS
250 REM LA SERIE 1D D CONTIENE LOS TOTALES POR ARTICULOS
260 DIM S(5),D(5)
270 FOR I=1 TO N
280 READ N$,D(1),D(2),D(3),D(4),D(5)
290 REM INICIALIZAR TOTAL VENTAS A CERO
300 T=0
310 FOR J=1 TO 5
320 REM TOMAR LAS VENTAS DE CADA
330 REM ARTICULO Y SUMARLAS AL TOTAL
340 REM DE VENTAS POR REPRESENTANTE Y
350 REM SUMARLAS TAMBIEN AL TOTAL
360 REM DE VENTAS POR ARTICULO
370 T=T+D(J)
380 S(J)=S(J)+D(J)
390 NEXT J
400 PRINT USING 390,D(1),D(2),D(3),D(4),D(5),T
410 :#### ## ## ## ## ##    ##
420 :####  #  #  #  #  #  ####
430 NEXT I
440 PRINT
450 PRINT USING 390,"POR ARTICULO",S(1),S(2),S(3),S(4),S(5)
460 PRINT
470 PRINT "TRABAJO TERMINADO"
480 END

 ANALISIS DE VENTAS

            VENTAS POR ARTICULO

 REPRESENT.      1  2  3  4  5  TOTAL VENTAS

 PEREZ           3  0  5  4 10  22
 LOPEZ           1  6 10  2  3  22
 PUIG            0 10  3  6  6  25

 POR ART.        4 16 18 12 19

 TRABAJO TERMINADO

Series bidimensionales o matrices

En una serie bidimensional (2D), tenemos un campo rectangular de celdillas:

		1	2	3	4
	1	100	20	3	1
	2	20	.02	25	18
	3	10	1.0	16	15
Para obtener un valor de una serie 2D empleamos dos números, el de la fila y el de la columna, en este orden. Por ejemplo, para transferir el valor en F(3,2) a una variable llamada X, escribimos: "15 X=F(3,2)". Para llenar una matriz como la de arriba:

100 REM 2D EJEMPLO
110 DATA 100,20,3,1
120 DATA 20,.02,25,18
130 DATA 10,1.0,16,15
140 DIM F(3,4)       <-- ES SIEMPRE NECESARIA UNA INSTRUCCION DE DIMENSION
150 FOR I=1 TO 3
160 FOR J=1 TO 4
170 READ F(I,J)
180 PRINT F(I,J),
190 NEXT J
200 PRINT
210 NEXT I
Si su sistema posee MAT READ y MAT PRINT se puede simplificar:

150 MAT READ F
160 MAT PRINT F

Lab 5. Análisis de costes de transportes

Se programará un procedimiento que seleccione el mejor método de transporte (AVIÓN, TREN o CAMION) para una carga en particular entre dos almacenes. En este ejemplo hay 5 almacenes. Cada una de las cargar que tiene que procesar consiste en una sola instrucción DATA con 4 valores:

El conjunto de datos para las pruebas iniciales son:

	N	O	D	P
	2345	2	5	.07
	2346	5	3	3.5
	2347	1	2	24.2
	2348	4	3	0.77
	2349	5	4	1.98
	2350	3	1	6.97
	2351	1	4	0.22
Nuestro procedimiento lee y procesa una carga (instrucción DATA) cada vez. Los cuatro valores son leídos en N,O,D y P; la distancia entre origen y destino es tomada de una tabla bidimensional, llamada K:

			Almacén de destino
				1	2	3	4	5
	Almacén		1	0	2010	1338	3757	3905
	de origen	2	2010	0	1222	3749	3763
			3	1338	1222	0	2744	2866
			4	3757	3749	2744	0	242
			5	3905	3763	2866	242	0
Esta tabla K, o tabla kilométrica, está almacenada en una serie bidimensional de dimensión y nombre K(5,5). La distancia entre origen 2 y destino 5 es K(2,5), y contendrá el valor 3763 durante todo el proceso.

Supongamos que K1=k(O,D) sea la distancia entre origen y destino.

Una vez determinada la distancia K1, es computado el costo de envío por cada uno de los tres métodos. Esto requiere otra tabla bidimensional a la que poder acudir, esta vez una Tabla de Fletes F.

		Límite peso	Coste por	Coste por
		cambio de	debajo		encima
		tarifa

	Avión	0.25		7.50		5.28
	Tren	33.00		0.63		0.42
	Camión	3.0		1.32		0.34

	Unid.	Toneladas	Dólares		Dólares
				por km/ton	por km/ton
Para cada método I (I=1,2,3), compute el coste C(I) como sigue:

		K1*P*F(I,2) si P < F(I,1)
	C(I) = 
		K1*(F(I,1)*F(I,2)+(P-F(I,1))*F(I,3)) si P >= F(I,1)
Encuentre qué valor de I posee el menor coste C(I). Imprima el número de embarque, origen, destino, distancia (K1), y el método de menor costo, seguido por su costo.

100 REM *** LAB 5. ANALISIS DE COSTES DE TRANSPORTE ***
110 PRINT "*** LAB 5. ANALISIS DE COSTES DE TRANSPORTE ***"
120 REM SIGUEN DATOS PARA TABLA DE KILOMETROS
130 DATA 0,2010,1338,3757,3905
140 DATA 2010,0,1222,3749,3763
150 DATA 1338,1222,0,2744,2866
160 DATA 3757,3749,2744,0,242
170 DATA 3905,3763,2866,242,0
180 REM FIN DATOS TABLA KILOMETROS
190 REM PONER DATOS EN MATRIZ
200 DIM K(5,5)
210 MAT READ K
220 PRINT "TABLA KILOMETROS"
230 MAT PRINT K
240 REM SIGUEN DATOS PARA TABLA FLETES
250 DATA 0.25,7.50,5.28
260 DATA 33.00,0.63,0.42
270 DATA 3.0,1.32,0.34
280 REM FIN DATOS TABLA FLETES
290 REM PONER DATOS EN MATRIZ
300 DIM F(3,3)
310 MAT READ F(3,3)
320 PRINT "TABLA FLETES"
330 MAT PRINT F
340 REM SIGUEN DATOS A PROCESAR
350 DATA 2345,2,5,.07
360 DATA 2346,5,3,3.5
370 DATA 2347,1,2,24.2
380 DATA 2348,4,3,0.77
390 DATA 2349,5,4,1.98
400 DATA 2350,3,1,6.97
410 DATA 2351,1,4,0.22
420 DATA 0,0,0,0     <--- SEÑALA EL FINAL DE LOS DATOS
430 REM FIN DE LOS DATOS
440 PRINT USING 670
450 REM INICIAR INSTRUCCIONES DE PROCESO DE DATOS
460 READ N,O,D,P
470 IF N=0 THEN 700   <--- BUSCA EL FINAL DE LOS DATOS
480 REM BUSCA DISTANCIA
490 K1=K(O,D)
500 FOR I=1 TO 3
510 REM COMPUTAR COSTE PARA METODO I
520 IF P>=F(I,1) THEN 550
530 C(I)=K1*P*F(I,2)
540 GOTO 560
550 C(I)=K1*(F(I,1)*F(I,2)+(P-F(I,1))*F(I,3))
560 NEXT I
570 REM HALLAR METODO DE MENOR COSTO
580 T=C(1)
590 FOR J=2 TO 3
600 IF C(J)>=T THEN 630
610 T=C(J)
620 M=J
630 NEXT J
640 REM IMPRIMIR DATOS EMBARQUE Y SOLUCION
650 PRINT USING 660,N,O,D,P,K1,M,C(M)
660 :  ####  #    #    ##.##  ####   #   #####.##
670 :  NUM   ORIG DEST PESO   DIST   MET COSTE
680 REM LEER NUEVO EMBARQUE
690 GOTO 460
700 PRINT "FIN DATOS; TRABAJO TERMINADO"
710 END
RUN

 TABLA KILOMETROS
	0	2010	1338	3757	3905
	2010	0	1222	3749	3763
	1338	1222	0	2744	2866
	3757	3749	2744	0	242
	3905	3763	2866	242	0

 TABLA FLETES
	0.25	7.50	5.28
	33.00	0.63	0.42
	3.0	1.32	0.34

 NUM   ORIG DEST PESO   DIST   MET COSTE
 2345  2    5    0.07   3763   2   165.95
 2346  5    3    3.5    2866   2  6319.53
 2347  1    2    24.2   2010   3 22447.68
 2348  4    3    0.77   2744   2  1331.11
 2349  5    4    1.98    242   2   301.87
 2350  3    1    6.97   1338   2  5875.29
 2351  1    4    0.22   3757   2   520.72

 FIN DATOS; TRABAJO TERMINADO
Hay un ligero error en el programa anterior que puede corregir tras procesarlo tal como está. En la línea 620, cualquier valor de J que produzca un costo inferior es almacenado en la variable M a 1 tras haber inicializado la localización temporal T. Para fijar el programa, inserte "585 M=1" y procéselo de nuevo ¿Hay algún cambio en la salida?

TI-Basic

Operadores numéricos +, -, *, /, ^

Operadores de cadena &

Operadores de relación >, <, =, >=, <=, <>

Rango numérico -1E-128 a -9.9999999999999E+127, cero, 1E-128 a 9.9999999999999E+127

Conjuntos de caracteres

Conjunto	Códigos ASCII	Conjunto	Códigos ASCII

   1		     32-39	   9		     96-103
   2		     40-47	   10		    104-111
   3		     48-55	   11		    112-119
   4		     56-63	   12		    120-127
   5		     64-71	   13		    128-135
   6		     72-79	   14		    136-143
   7		     80-87	   15		    144-151
   8		     88-95	   16		    152-159
Código de colores
Valor	Color		Valor	Color

  1	Transparente	  9	Rojo medio
  2	Negro		 10	Rojo claro
  3	Verde medio	 11	Amarillo oscuro
  4	Verde claro	 12	Amarillo claro
  5	Azul oscuro	 13	Verde oscuro
  6	Azul claro	 14	Morado
  7	Rojo oscuro	 15	Gris
  8	Cyan		 16	Blanco
ABS(número) Función, regresa el valor absoluto.

ASC(cadena) Función, regresa el código ASCII del primer carácter de la cadena.

ATN(radianes) Función, regresa el arco tangente trigonométrico.

BREAK |número de línea|. Comando. Enunciado, hace que el programa se detenga cuando se encuentra.

BYE Comando. Cierra los archivos abiertos y sale de TI Basic.

CALL CHAR(código de caracteres, identificador de patrón) Comando. Enunciado. Redefine el código ASCII especificado usando una cadena codificada de 16 caracteres hexadecimales.

CALL CLEAR Comando. Enunciado. Pone espacios (ASCII 32) en toda la pantalla.

CALL COLOR(conjunto de caracteres, color de frente, color de fondo) Comando. Enunciado. Especifica el color de frente y fondo de los caracteres especificados en el conjunto de caracteres.

CALL GCHAR(renglón, columna, variable) Comando. Enunciado. Regresa el código ASCII del carácter localizado en el renglón (1-24) y columna (1-32) especificadas.

CALL HCHAR(renglón, columna, código ASCII de un carácter |,repeticiones|) Comando. Enunciado. Pone el carácter en el renglón y columna especificadas, opcionalmente lo repite horizontalmente.

CALL JOYST(unidad de llave,x,y) Comando. Enunciado. Entra información de la posición de la unidad de llave (palanca de mando 1-4) en x (-4,0,4) y en y (-4,0,4).

CALL KEY(unidad de llave, variable de regreso, variable de estado) Comando. Enunciado. Asigna el código ASCII de la tecla presionada en la unidad de llave (palanca de mando 1-4 o teclado 5) a la variable de regreso. La variable de estado puede regresar: 1=nueva tecla presionada, -1=misma tecla presionada, 0=no hay tecla presionada.

CALL SCREEN(código de color) Comando. Enunciado. Cambia el color de la pantalla.

CALL SOUND (duración, frecuencia_1, volumen_1|, frecuencia_2, volumen_2||, frecuencia_3, volumen_3||, frecuencia_4, volumen_4|) Comando. Enunciado. Controla hasta tres generadores de tonos y uno de ruido. Los parámetros de los tonos y los ruidos pueden ocurrir en cualquier orden. Una duración negativa causa que el sonido se actualice inmediatamente.

CALL VCHAR(renglón, columna, código ASCII de un carácter |,repeticiones|) Comando. Enunciado. Pone el carácter en el renglón y columna especificadas, opcionalmente lo repite verticalmente.

CHR$(número) Función. Regresa el carácter correspondiente al valor ASCII especificado.

CLOSE #número-archivo|:DELETE| Comando, Enunciado. Discontinua la asociación entre un archivo y un programa, opcionalmente borra el archivo.

{CONTINUE}{CON} Comando. Continua la ejecución de un programa después de que un BREAK ha ocasionado que se detenga.

COS(radianes) Función. Regresa el coseno trigonométrico.

DATA lista de datos Enunciado. Almacena constantes numéricas y de cadena en un programa.

DEF nombre de función|(parámetros)|=expresión Enunciado. Asocia una expresión (numérica o de cadena) definida por el usuario con el nombre de una función.

DELETE {nombre de archivo, nombre de programa}. Comando. Borra el archivo o el programa del sistema de almacenamiento de la computadora.

DIM {nombre de arreglo(entero1|,entero 2||,entero 3|)}... Comando. Enunciado. Dimensiona los arreglos listados de acuerdo a los enteros especificados.

DISPLAY |lista| Comando. Enunciado. Ver enunciado PRINT.

{EDIT número de línea}{número de línea {flecha arriba}{flecha abajo}} Comando. Despliega una línea del programa para su edición.

END Comando. Enunciado. Termina la ejecución de un programa.

EOF(número) Función. Regresa la condición de fin de archivo del archivo especificado: 0: no está en el fin. 1: fin lógico. -1: fin físico.

EXP(número) Función. Regresa el valor exponencial (e^número) del argumento.

FOR variable de control=valor inicial TO limite |STEP incremento| Enunciado. Repite la ejecución de los enunciados entre las líneas FOR y NEXT hasta que la variable de control exceda el límite. El STEP de default es 1.

GOSUB número de línea Enunciado. Transfiere el control a la subrutina especificada en el número de línea hasta que se encuentre un RETURN.

GOTO número de línea Enunciado. Transfiere el control al número de línea especificado.

IF {expresión de relación}{expresión numérica} THEN número de línea 1 |ELSE número de línea 2| Enunciado. Transfiere el control al número de línea 1 si la expresión de relación es verdadero o la expresión numérica no es igual a cero. Si es falso o igual a cero el control pasa a la siguiente línea u opcionalmente al número de línea 2.

INPUT |pregunta:| lista de variables Enunciado. Suspende el programa hasta que el usuario entre datos desde el teclado. La pregunta opcional indica que datos deben ser entrados.

INPUT #número de archivo|,REC número de registro|: lista de variables Enunciado. Entra datos del archivo especificado a las variables listadas. Los registros se leen secuencialmente a menos que la cláusula REC se use.

INT(número) Función. Regresa el entero más grande que sea menor o igual al argumento.

LEN(cadena) Función. Regresa el número de caracteres de la cadena.

[LET] variable=expresión Comando. Enunciado. Asigna el valor de la expresión a la variable.

LIST [{número de línea}{línea 1-línea 2}{-línea}{línea-}] Comando. Despliega los enunciados del programa contenidos entre las líneas especificadas.

LOG(número) Función. Regresa el logaritmo natural.

NEW Comando. Limpia la memoria y la pantalla y prepara a la computadora para un nuevo programa.

NEXT variable de control Enunciado. Ver el enunciado FOR.

{NUMBER}{NUM} |línea inicial||, incremento| Comando. Genera automáticamente números de línea secuenciales para facilitar la escritura de programas.

OLD file-name Comando. Carga un programa del dispositivo de almacenamiento a la memoria de la computadora.

ON número GOSUB lista de números de línea Enunciado. Transfiere el control a la subrutina cuya línea de empiezo esté en la posición correspondiente al número en la lista de números de línea.

ON número GOTO lista de números de línea Enunciado. Transfiere el control a la línea que esté en la posición correspondiente al número en la lista de números de línea.

OPEN #número de archivo:nombre de archivo|, organización de archivo||, tipo de archivo||, modo de apertura||, tipo de registro| Comando. Enunciado. Prepara un programa para usar un archivo específico:

OPTION BASE {0}{1} Enunciado. Establece el mínimo valor permisible en los arreglos. El default es cero.

POS{|lista de impresión|}{#número de archivo|,REC número de registro|}{:lista de impresión} Comando. Enunciado. Imprime en la pantalla o en un archivo externo o dispositivo. La cláusula REC hace que la salida sea a un registro específico.

RANDOMIZE |semilla| Comando. Enunciado. Resetea el generador de números aleatorios a una secuencia impredecible. Con la semilla opcional (número), la secuencia es repetible.

READ lista de variables Enunciado. Asigna las constantes numéricas y de cadena en el enunciado DATA a las variables listadas.

REM Comando. Enunciado. Documentación interna del programa.

{RESEQUENCE}{RES} |línea inicial||,incremento| Comando. Renumera los enunciados de un programa empezando en 100 y en incrementos de 10. Se pueden especificar el número de línea inicial y el incremento.

RESTORE {#número de archivo|,REC número de registro|}{|número de línea|} Comando. Enunciado. Indica el número de registro o línea DATA desde donde la siguiente instrucción READ leerá sus datos. Si no se le dan parámetros, el primer registro de un archivo o la primera instrucción DATA serán las leídas.

RETURN Enunciado. Transfiere el control del programa desde una subrutina hacia la siguiente línea correspondiente al GOSUB o al ON..GOSUB que llamó a la subrutina.

RND Función. Genera un número pseudo aleatorio entre cero y uno.

RUN |número de línea| Comando. Empieza la ejecución de un programa en la línea con número más bajo o en la línea especificada.

SAVE nombre de archivo Comando. Pone una copia del programa en el dispositivo especificado.

SEG$(cadena,posición,longitud) Función. Regresa una subcadena de la cadena que empieza en posición y con la longitud especificada.

SGN(número) Función. Regresa 1 si el argumento es positivo, 0 si el argumento es cero y -1 si el argumento es negativo.

SIN(radianes) Función. Regresa el seno trigonométrico.

SQR(número) Función. Regresa la raíz cuadrada del número.

STOP Comando. Enunciado. Termina la ejecución del programa.

STR$(número) Función. Convierte el valor del argumento a una cadena.

TAB(número) Función. Controla la posición de columna de la salida de un enunciado PRINT o DISPLAY.

TAN(radianes) Función. Regresa la tangente trigonométrica.

TRACE Comando. Enunciado. Lista el número de línea de los enunciados antes de que sean ejecutados.

UNBREAK |lista de números de líneas| Comando. Enunciado. Quita todos los BREAK o solo aquellos que estén en la lista de números de líneas.

UNTRACE Comando. Enunciado. Cancela el comando TRACE.

VAL(cadena) Función. Convierte la cadena de un número a una constante numérica.

Algunos Programas en TI-Basic

Archivo
Ascii
Autodef
Avispon
Barrarc
Barrson
Bolita
Canon
Coches .- Programa de Coches Chocones.
Code
Confeti
DeTodo
Divsint
Escala
Escala2
Hanoi
Inchworm
Instruc
Joy
joy_son
Marquee
Monito
Monote
Musical
Num_Secr
p_01
Puma
Puntero
Random
Ruleta
Star
Trigono
Turista

Códigos de función de teclado

	    Códigos
Modos TI99/4 &	Modos	Nombre de	Teclas de
    BASIC	Pascal	Función		Función

      1		  129	AID		FCTN 7
      2		  130	CLEAR		FCTN 4
      3		  131	DELete		FCTN 1
      4		  132	INSert		FCTN 2
      5		  133	QUIT		FCTN =
      6		  134	REDO		FCTN 8
      7		  135	ERASE		FCTN 3
      8		  136	LEFT		FCTN S
      9		  137	RIGHT		FCTN D
     10		  138	DOWN		FCTN X
     11		  139	UP		FCTN E
     12		  140	PROC'D		FCTN 6
     13		  141	ENTER		ENTER
     14		  142	BEGIN		FCTN 5
     15		  143	BACK		FCTN 9

	    Códigos
Modos TI99/4 &	Modos	Código
    BASIC	Pascal	Mnemónico	Presionar	Comentario

    129		  1	SOH		CONTROL A	Start Of Heading
    130		  2	STX		CONTROL B	Start of TeXt
    131		  3	ETX		CONTROL C	End of TeXt
    132		  4	EOT		CONTROL D	End Of Transmission
    133		  5	ENQ		CONTROL E	ENQuiry
    134		  6	ACK		CONTROL F	ACKnowledge
    135		  7	BEL		CONTROL G	BELl
    136		  8	BS		CONTROL H	BackSpace
    137		  9	HT		CONTROL I	Horizontal Tabulation
    138		 10 	LF		CONTROL J	Line Feed
    139		 11	VT		CONTROL K	Vertical Tabulation
    140		 12	FF		CONTROL L	Form Feed
    141		 13	CR		CONTROL M	Carriage Return
    142		 14	SO		CONTROL N	Shift Out
    143		 15	SI		CONTROL O	Shift In
    144		 16	DLE		CONTROL P	Data Link Escape
    145		 17	DC1		CONTROL Q	Device Control 1 (X-ON)
    146		 18	DC2		CONTROL R	Device Control 2
    147		 19	DC3		CONTROL S	Device Control 3 (X-ON)
    148		 20 	DC4		CONTROL T	Device Control 4
    149		 21	NAK		CONTROL U	Negative AcKnowledge
    150		 22	SYN		CONTROL V	SYNchronous Idle
    151		 23	ETB		CONTROL W	End of Transmission Block
    152		 24	CAN		CONTROL X	CANcel
    153		 25	EM		CONTROL Y	End of Medium
    154		 26	SUB		CONTROL Z	SUBstitute
    155		 27	ESC		CONTROL .	ESCape
    156		 28	FS		CONTROL :	File Separator
    157		 29	GS		CONTROL =	Group Separator
    158		 30 	RS		CONTROL 8	Record Separator
    159		 31	US		CONTROL 9	Unit Separator

   Código ASCII		Carácter	  Código ASCII		Carácter

	32		  (espacio)		71		G
	33		! (exclamación)		72		H
	34		" (comilla)		73		I
	35		# (número)		74		J
	36		$ (moneda)		75		K
	37		% (porcentaje)		76		L
	38		& (y comercial)		77		M
	39		' (apóstrofe)		78		N
	40		( (paréntesis)		79		O
	41		) (paréntesis)		80		P
	42		* (asterisco)		81		Q
	43		+ (más)			82		R
	44		, (coma)		83		S
	45		- (menos)		84		T
	46		. (punto)		85		U
	47		/ (diagonal)		86		V
	48		0			87		W
	49		1			88		X
	50		2			89		Y
	51		3			90		Z
	52		4			91		[ (paréntesis cuadrado)
	53		5			92		\ (diagonal invertida)
	54		6			93		] (paréntesis cuadrado)
	55		7			94		^ (exponente)
	56		8			95		_ (guión bajo)
	57		9			96		` (acento grave)
	58		: (dos puntos)		97		a
	59		; (punto y coma)	98		b
	60		< (menor que)		99		c
	61		= (igual)		100		d
	62		> (mayor que)		101		e
	63		? (interrogación)	102		f
	64		@ (arroba)		103		g	
	65		A			104		h
	66		B			105		i
	67		C			106		j
	68		D			107		k
	69		E			108		l
	70		F			109		m
						110		n
						111		o
						112		p
						113		q
						114		r
						115		s
						116		t
						117		u
						118		v
						119		w
						120		x
						121		y
						122		z
						123		{ (llave)
						124		|
						125		} (llave)
						126		~ (tilde)
						127		DEL
						128-159 (definidos por el usuario)

Frecuencias de tonos musicales

     Frecuencia	      Nota	     Frecuencia	      Nota

	110		A		440		A (sobre C media)
	117		A#, Bb		466		A#, Bb
	123		B		494		B
	131		C (baja)	523		C (alta)
	139		C#, Db		554		C#, Db
	147		D		587		D
	156		D#, Eb		622		D#, Eb
	165		E		659		E
	175		F		698		F
	185		F#, Gb		740		F#, Gb
	196		G		784		G
	208		G#, Ab		831		G#, Ab
	220		A(bajo C media)	880		A (sobre C alta)
	233		A#, Bb		932		A#, Bb
	247		B		988		B
	262		C (media)	1047		C (alta)
	277		C#, Db		1109		C#, Db
	294		D		1175		D
	311		D#, Eb		1245		D#, Eb
	330		E		1319		E
	349		F		1397		F
	370		F#, Gb		1480		F#, Gb
	392		G		1568		G
	415		G#, Ab		1661		G#, Ab
	440		A(sobre C media) 1760		A

Representación interna de números

La TI-994A usa una mantisa de 7 dígitos Radix-100 para sus cálculos internos. Un dígito Radix-100 tiene un rango de valores de 0 a 99 en base 10. Esto significa que un número expresado en 7 dígitos Radix 100 corresponderá a la precisión decimal de 13 a 14 dígitos, dependiendo del valor.

Los exponentes Radix-100 tienen un rango de -64 a 63 que representan valores decimales de 10^(-128) a 10^(128). La combinación de la mantisa y el exponente proveen un rango decimal que va de -1E-128 a -9.9999999999999E+127, cero y 1E-128 a 9.9999999999999E+127

El formato interno de cada valor numérico consiste en 8 bytes. El primer byte contiene el exponente y su signo, modificado por el hexadecimal 40. Los bytes remanentes contienen la mantisa, con el dígito más significativo al principio. El número es normalizado para que el punto decimal esté inmediatamente después del dígito más significativo. Si el número es negativo, entonces los dos primeros bytes son complementados

Ejemplos:

		EXP	MSD						LSD
127	=	41	01	1B	00	00	00	00	00
0.5	=	3F	32	00	00	00	00	00	00
pi/2	=	40	01	39	07	60	20	43	5F
-pi/2	=	BF	FF	39	07	60	20	43	5F